#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/3/9
# @Author: Sunny
# ========================
"""
如果要使用Pool创建进程，就需要使用multiprocessing.Manager().Queue()，而不是使用multiprocessing.Queue()，
否则会报错

"""
import time
import os
from multiprocessing import Pool, Manager


def work(name, q):
    for i in range(3):
        time.sleep(1)
        print(f'{name}:---{os.getpid()}-----work{i}-------{q.get()}---')


def main():
    # 创建一个用于进程池通信的队列
    que = Manager().Queue()
    for i in range(1000):
        que.put(f'data-{i}')

    # 创建一个拥有5个进程的进程池
    po = Pool(5)

    # 往进程池中添加20个任务
    for i in range(20):
        po.apply_async(work, (f'musen{i}', que))  # 后面的参数，以元组的形式传参

    # close:关闭进程池(进程池停止接收任务)
    po.close()
    # 主进程等待进程池中的任务结束再往下执行
    po.join()


if __name__ == '__main__':
    main()
